package com.istabs.services;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.MappingIterator;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.web.client.RestTemplate;

import com.istabs.beans.Categoria;
import com.istabs.beans.Establecimiento;

public class DirectorioService {

	private RestTemplate restTemplate;
	private JsonFactory jsonFactory = null;
	private JsonParser jp = null;
	private ObjectMapper objectMapper = null;
	private Categoria cat = null;

	public DirectorioService() {
		restTemplate = new RestTemplate();
		objectMapper = new ObjectMapper();
		jsonFactory = new JsonFactory();

	}

	public Categoria[] obtenerCategorias(String idPadre)
			throws ServiceException {

		if (idPadre == null) {
			idPadre = "categorias.json";
		} else {
			idPadre = "categorias/" + idPadre + ".json";
		}
		String url = "http://api.mitiempo.pe/0.5/directorio/" + idPadre;
		String result = restTemplate.getForObject(url, String.class);
		try {
			jp = jsonFactory.createJsonParser(result);
			cat = objectMapper.readValue(jp, Categoria.class);
			if (cat.getSubcategorias() != null) {
				return cat.getSubcategorias();
			}
			return null;

		} catch (Exception e) {
			throw new ServiceException("Error al obtener los establecimientos",
					e);
		}

	}

	public Establecimiento[] obtenerEstablecimientos(String id)
			throws ServiceException {

		String url = "http://api.mitiempo.pe/0.5/directorio/categoria/" + id
				+ ".json";
		String result = restTemplate.getForObject(url, String.class);
		try {
			jp = jsonFactory.createJsonParser(result);
			cat = objectMapper.readValue(jp, Categoria.class);
			if (cat.getEstablecimientos() != null) {
				return cat.getEstablecimientos();
			}
			return null;

		} catch (Exception e) {
			throw new ServiceException("Error al obtener los establecimientos",
					e);
		}

	}

	public Establecimiento obtenerEstablecimiento(int idEstablecimiento,
			Class<? extends Establecimiento> tipoEstablecimiento)
			throws ServiceException {

		// String url =
		// "http://api.mitiempo.pe/0.5/agenda/calendario/2012-02-06.json";
		String url = "http://api.mitiempo.pe/0.5/directorio/establecimiento/"
				.concat(idEstablecimiento + "").concat(".json");
		String result = restTemplate.getForObject(url, String.class);
		try {
			jp = jsonFactory.createJsonParser(result);
			return objectMapper.readValue(jp, tipoEstablecimiento);

		} catch (Exception e) {
			throw new ServiceException("Error al obtener el establecimiento", e);
		}

	}

}
